package com.lxy.digitaltwins.common.task;

import java.util.Random;

public class SensorDataGenerator {
    private static final double MIN_VALUE = 30.0;
    private static final double MAX_VALUE = 50.0;
    private static final double MAX_CHANGE = 0.5;
    private static final int DECIMAL_PLACES = 2; // 保留2位小数
    
    private double currentValue;
    private final Random random = new Random();

    public SensorDataGenerator() {
        // 初始化时生成30-50之间的随机值
        this.currentValue = generateRandomValue(MIN_VALUE, MAX_VALUE);
    }

    public double getNextValue() {
        // 计算新值的范围（确保在30-50之间且变化不超过0.5）
        double min = Math.max(MIN_VALUE, currentValue - MAX_CHANGE);
        double max = Math.min(MAX_VALUE, currentValue + MAX_CHANGE);
        
        // 生成新值并更新当前值
        double newValue = generateRandomValue(min, max);
        currentValue = newValue;
        
        return newValue;
    }

    private double generateRandomValue(double min, double max) {
        // 生成[min, max]范围内的随机值
        double value = min + (max - min) * random.nextDouble();
        
        // 四舍五入到指定小数位
        double scale = Math.pow(10, DECIMAL_PLACES);
        return Math.round(value * scale) / scale;
    }

//    public static void main(String[] args) {
//        SensorDataGenerator generator = new SensorDataGenerator();
//
//        System.out.println("初始值: " + generator.currentValue);
//
//        // 生成10个连续值
//        for (int i = 0; i < 10; i++) {
//            System.out.println("值 #" + (i+1) + ": " + generator.getNextValue());
//        }
//    }
}